package com.utils;

import java.io.IOException;
import java.math.BigInteger;
import java.security.interfaces.RSAPrivateKey;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpRequestRetryHandler;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
//import com.eastcompeace.share.cipher.RSACipher;
//import com.eastcompeace.share.cipher.SHACipher;
//import com.eastcompeace.share.utils.ByteUtils;

/**
 * 阿里云短信服务
 * @Date 2019年6月12日
 */
@Service
public class SmsUtil {

//
//    /**
//     * 生产验证码
//     * @param n
//     * @return
//     * String
//     */
//    public static String gMsg(int n) {
//        // 长度限制在1~10之间
//        if(n<4 || n>10) {
//            n = 4;
//        }
//        int factor = 1;
//        for (int i = 1; i < n; i++) {
//            factor *= 10;
//        }
//        return String.valueOf((int)((Math.random()*9+1)*factor));
//    }
//    
//    public static void sendMessage(String phone) throws IOException{
//		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//		
//		String uuid = "cfc59e55-aa0d-479c-a7d1-d6a43655eae3";	// 短信网关为平台分配的id
//		String timestamp = formatter.format(new Date());		// 时间戳
//		
//		// 构造参数true函义是保证JSON内部字段结构排序按put先后顺序排列
//		JSONObject json = new JSONObject(true);
//		json.put("uuid", uuid);
//		json.put("timestamp", timestamp);
//		
//		// 一次可以发送多条短信
//		JSONArray array = new JSONArray();
//		array.add(getIdentifyMessage(phone));
//		//array.add(Demo.getIdentifyMessage2());
//		//array.add(Demo.getIdentifyMessage3());
//		json.put("message", array);
//		
//		// 计算第三方平台私钥
//		String strPrivateKey = "493401b804e3f88c62cf0243891283b4893fcc00fc6aa705619e7ce6f089a10854ae80865371b08c39605bdf1df2a134e1d1a05fcd099b8839de50a2078d8591db396afcbd5a2b3143fe7ac8032462b4b247d4ab8a501f3c23a98761efcff6776ee49f2122d9ab6b6d37c048b8963d683e60af2b60e879940987d671980639f1";
//		String strPublicKey = "b8ad12dc9bd1b2b472f9eba55f1db587b4acf060e4bd294a6860a366cbea2d8c0c9a2cf1d434f0314a9ab03b89fff3c68ef44b75c66c9a246f9e081586279633e308c743e246e8f4f2fa023c3d23f2f70ae9212cc26dabcf81e494512fc5b6b0d3b5616e81d570e09d494c852dac22bf389c340cc7ca16a636d113950316d4bf";
//		BigInteger modulus = new BigInteger(strPublicKey, 16);
//		BigInteger privateExponent = new BigInteger(strPrivateKey, 16);
//		RSAPrivateKey privateKey = RSACipher.getRSAPrivateKey(modulus, privateExponent);
//		
//		// 计算报文hash
//		byte[] hash = SHACipher.encrypt(json.toString().getBytes());
//		System.out.println("hash: " + ByteUtils.toHexString(hash).toLowerCase());
//		
//		// 使用私钥签名
//		String sign = ByteUtils.toHexString(RSACipher.sign(hash, privateKey)).toLowerCase();
//		System.out.println("sign: " + sign);
//		
//		// 请求报文中添加签名
//		json.put("sign", sign);
//		System.out.println("request: " + json.toString());
//		
////		String rsp = sendHttpRequest("http://localhost:8080/sms/ctrls/message/send", json.toString());
//		String rsp = sendHttpRequest("http://sms.gxdata.net/api/ctrls/message/send", json.toString());
//		System.out.println(rsp);
//    }
//    
//	// 验证码短信
//	static JSONObject getIdentifyMessage(String phone) {
//		String snflag = "sn4";
//		String type = "identify";
//		String tplid = "255ad103-fc68-404d-847f-99ffcd94d4e1";
//		String phoneNumber = phone;
//		String content = gMsg(4);
//		
//		// 构造参数true函义是保证JSON内部字段结构排序按put先后顺序排列
//		// put字段顺序严格按照文档要求
//		JSONObject json = new JSONObject(true);
//		json.put("snflag", snflag);
//		json.put("type", type);
//		json.put("tplid", tplid);
//		json.put("phoneNumber", phoneNumber);
//		json.put("content", content);
//		
//		return json;
//	}
//
//	static String sendHttpRequest(String url, String content) throws IOException {
//        String charset = "UTF-8";
//		
//		HttpRequestRetryHandler handler = new DefaultHttpRequestRetryHandler();
//		RequestConfig config = RequestConfig.custom().setConnectTimeout(30000).setSocketTimeout(30000).build();
//		
//		HttpClientBuilder builder = HttpClientBuilder.create();
//		builder.setDefaultRequestConfig(config);
//		builder.setRetryHandler(handler);
//		
//		CloseableHttpClient client = builder.build();
//		StringEntity entity = new StringEntity(content, charset);
//		
//		HttpPost post = new HttpPost(url);
//		post.setHeader("pragma", "no-cache");
//		post.setHeader("cache-control", "no-cache");
//		post.setHeader("Content-Type", "text/html; charset=UTF-8");
//		post.setHeader("Charset", charset);
//		post.setEntity(entity);
//		
//		CloseableHttpResponse response = client.execute(post);
//		
//		int statusCode = response.getStatusLine().getStatusCode();
//		String reasonPhrase = response.getStatusLine().getReasonPhrase();
//		
//		String rspText = "";
//		if (statusCode == HttpStatus.SC_OK) {
//			HttpEntity http = response.getEntity();
//			rspText = EntityUtils.toString(http, charset);
//			
//			EntityUtils.consume(http);
//			
//			response.close();
//			post.releaseConnection();
//		} else {
//			post.abort();
//			post.releaseConnection();
//			throw new IOException("send HttpRequest error:[" + statusCode + "]" + reasonPhrase);
//		}
//		
//		return rspText;
//	}
}
